package com.sojson.project.entity.po;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.sojson.base.impl.BaseDto;
import com.sojson.enums.EPostStatus;
import com.sojson.enums.core.EDelFlagStatus;
import com.sojson.util.DateUtil;
import com.sojson.util.StringUtil;
import com.sojson.util.id.IdUtil;
import com.sojson.util.token.TokenUtil;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * 职位表Bean
 * 
 * @author liu
 * @date 2021-04-15
 */
@ApiModel("职位表Bean")
public class Post extends BaseDto {

    /**
     * 此文件由工具自动生成，手动添加内容请放至末尾
     */

    private static final long serialVersionUID = 1618475390582L;

    @ApiModelProperty("职位编号")
    private String no;
    @ApiModelProperty("用户ID")
    private String userId;
    @ApiModelProperty("职位类型(1:短期,2:长期,3:全职)")
    private Integer type;
    @ApiModelProperty("职位详细类型ID")
    private Integer typeDescId;
    @ApiModelProperty("职位名称")
    private String name;
    @ApiModelProperty("工作经验ID(1:在校生,2:应届生,3:1年以内,4:1-3年,5:3-5年,6:5-10年,7:10年以上)")
    private String undergo;
    @ApiModelProperty("工作福利(逗号拼接)")
    private String welfare;
    @ApiModelProperty("职位状态(1:招聘中,2:已完成,3:已关闭)")
    private Integer status;
    @ApiModelProperty("职位关闭原因")
    private String closeMsg;
    @ApiModelProperty("职位预计关闭时间")
    private Date closeTimeReady;
    @JsonFormat(pattern = "yyyy-MM-dd")
    @JSONField(format = "yyyy-MM-dd")
    @ApiModelProperty("工作开始年份")
    private Date startYear;
    @JsonFormat(pattern = "yyyy-MM-dd")
    @JSONField(format = "yyyy-MM-dd")
    @ApiModelProperty("工作结束年份")
    private Date endYear;
    @JsonFormat(pattern = "HH:mm")
    @JSONField(format = "HH:mm")
    @ApiModelProperty("工作开始时间")
    private Date startTime;
    @JsonFormat(pattern = "HH:mm")
    @JSONField(format = "HH:mm")
    @ApiModelProperty("工作结束时间")
    private Date endTime;
    @ApiModelProperty("星期")
    private String week;
    @ApiModelProperty("是否推荐 1:是,2:否")
    private Integer isRem;
    @ApiModelProperty("经度")
    private Float targetX;
    @ApiModelProperty("维度")
    private Float targetY;
    @ApiModelProperty("省")
    private String province;
    @ApiModelProperty("市")
    private String city;
    @ApiModelProperty("区")
    private String area;
    @ApiModelProperty("详细地址")
    private String address;
    @ApiModelProperty("上岗须知")
    private String notice;
    @ApiModelProperty("详情图片")
    private String img;
    @ApiModelProperty("列表图片(逗号拼接)")
    private String imgs;
    @ApiModelProperty("是否需要诚意金(1:是,2:否)")
    private Integer isDeposit;
    @ApiModelProperty("结算类型(1:日结,2:周结,3:月结)")
    private Integer settleType;
    @ApiModelProperty("薪资(用来排序)")
    private BigDecimal paySort;
    @ApiModelProperty("薪资(/小时)")
    private BigDecimal payHour;
    @ApiModelProperty("薪资(/月)最高")
    private BigDecimal payHeight;
    @ApiModelProperty("薪资(/月)最低")
    private BigDecimal payLow;
    @ApiModelProperty("人数")
    private Integer numPeople;
    @ApiModelProperty("性别要求(1:不限,2:男,3:女)")
    private Integer sexType;
    @ApiModelProperty("年龄要求")
    private String age;
    @ApiModelProperty("身高要求")
    private Integer stature;
    @ApiModelProperty("工作次数要求(0:不限)")
    private Integer workNum;
    @ApiModelProperty("学历要求(1:初中,2:中专,3:高中,4:大专,5:本科,6:硕士,7:博士,8:不限)")
    private Integer education;
    @ApiModelProperty("公司名称")
    private String companyName;
    @ApiModelProperty("公司介绍")
    private String companyIntroduce;
    @ApiModelProperty("联系方式(手机号)")
    private String mobile;
    @ApiModelProperty("联系方式(微信号)")
    private String wx;
    @ApiModelProperty("删除标记(1:存在,2:删除)")
    private Integer delFlag;
    @ApiModelProperty("创建时间")
    private Date createdAt;
    @ApiModelProperty("更新时间")
    private Date updatedAt;
    /** ID集合 */
    private List<Integer> ids;
    /** 用户ID集合 */
    private List<Integer> userIds;
    /** 职位表集合 */
    private List<Post> posts;
    @ApiModelProperty("是否已过期(true:是,false:否)")
    private Boolean isOutDate;

    /**
     * 以上由工具自动生成，以下为手动添加
     */

       /**
        * Empty constructor
        */
    public Post() {

    }

    /**
     * 此文件由工具自动生成，手动添加内容请放至末尾
     */

    /**
     * 获取 职位编号
     */
    @Override
    public String getNo() {
        return no;
    }

    /**
     * 设置 职位编号
     */
    @Override
    public void setNo(String no) {
        this.no = no;
    }

    /**
     * 获取 用户ID
     */
    public String getUserId() {
        return userId;
    }

    /**
     * 设置 用户ID
     */
    public void setUserId(String userId) {
        this.userId = userId;
    }

    /**
     * 获取 职位类型(1:短期,2:长期,3:全职)
     */
    public Integer getType() {
        return type;
    }

    /**
     * 设置 职位类型(1:短期,2:长期,3:全职)
     */
    public void setType(Integer type) {
        this.type = type;
    }

    /**
     * 获取 职位详细类型ID
     */
    public Integer getTypeDescId() {
        return typeDescId;
    }

    /**
     * 设置 职位详细类型ID
     */
    public void setTypeDescId(Integer typeDescId) {
        this.typeDescId = typeDescId;
    }

    /**
     * 获取 职位名称
     */
    public String getName() {
        return name;
    }

    /**
     * 设置 职位名称
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取 工作经验ID(1:在校生,2:应届生,3:1年以内,4:1-3年,5:3-5年,6:5-10年,7:10年以上)
     */
    public String getUndergo() {
        return undergo;
    }

    /**
     * 设置 工作经验ID(1:在校生,2:应届生,3:1年以内,4:1-3年,5:3-5年,6:5-10年,7:10年以上)
     */
    public void setUndergo(String undergo) {
        this.undergo = undergo;
    }

    /**
     * 获取 工作福利(逗号拼接)
     */
    public String getWelfare() {
        return welfare;
    }

    /**
     * 设置 工作福利(逗号拼接)
     */
    public void setWelfare(String welfare) {
        this.welfare = welfare;
    }

    /**
     * 获取 职位状态(1:招聘中,2:已完成,3:已关闭)
     */
    public Integer getStatus() {
        return status;
    }

    /**
     * 设置 职位状态(1:招聘中,2:已完成,3:已关闭)
     */
    public void setStatus(Integer status) {
        this.status = status;
    }

    /**
     * 获取 职位关闭原因
     */
    public String getCloseMsg() {
        return closeMsg;
    }

    /**
     * 设置 职位关闭原因
     */
    public void setCloseMsg(String closeMsg) {
        this.closeMsg = closeMsg;
    }

    /**
     * 获取职位预计关闭时间
     * 
     * @return
     */
    public Date getCloseTimeReady() {
        return closeTimeReady;
    }

    /**
     * 设置职位预计关闭时间
     * 
     * @param closeTimeReady
     */
    public void setCloseTimeReady(Date closeTimeReady) {
        this.closeTimeReady = closeTimeReady;
    }

    /**
     * 获取 工作开始年份
     */
    public Date getStartYear() {
        return startYear;
    }

    /**
     * 设置 工作开始年份
     */
    public void setStartYear(Date startYear) {
        this.startYear = startYear;
    }

    /**
     * 获取 工作结束年份
     */
    public Date getEndYear() {
        return endYear;
    }

    /**
     * 设置 工作结束年份
     */
    public void setEndYear(Date endYear) {
        this.endYear = endYear;
    }

    /**
     * 获取 工作开始时间
     */
    public Date getStartTime() {
        return startTime;
    }

    /**
     * 设置 工作开始时间
     */
    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    /**
     * 获取 工作结束时间
     */
    public Date getEndTime() {
        return endTime;
    }

    /**
     * 设置 工作结束时间
     */
    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }

    /**
     * 获取星期
     * 
     * @return
     */
    public String getWeek() {
        return week;
    }

    /**
     * 设置星期
     * 
     * @param week
     */
    public void setWeek(String week) {
        this.week = week;
    }

    /**
     * 获取是否推荐 1:是,2:否
     * 
     * @return
     */
    public Integer getIsRem() {
        return isRem;
    }

    /**
     * 设置是否推荐 1:是,2:否
     * 
     * @param isRem
     */
    public void setIsRem(Integer isRem) {
        this.isRem = isRem;
    }

    /**
     * 获取 经度
     */
    public Float getTargetX() {
        return targetX;
    }

    /**
     * 设置 经度
     */
    public void setTargetX(Float targetX) {
        this.targetX = targetX;
    }

    /**
     * 获取 维度
     */
    public Float getTargetY() {
        return targetY;
    }

    /**
     * 设置 维度
     */
    public void setTargetY(Float targetY) {
        this.targetY = targetY;
    }

    /**
     * 获取 上岗须知
     */
    public String getNotice() {
        return notice;
    }

    /**
     * 设置 上岗须知
     */
    public void setNotice(String notice) {
        this.notice = notice;
    }

    /**
     * 获取 详情图片
     */
    public String getImg() {
        return img;
    }

    /**
     * 设置 详情图片
     */
    public void setImg(String img) {
        this.img = img;
    }

    /**
     * 获取 列表图片(逗号拼接)
     */
    public String getImgs() {
        return imgs;
    }

    /**
     * 设置 列表图片(逗号拼接)
     */
    public void setImgs(String imgs) {
        this.imgs = imgs;
    }

    /**
     * 获取 是否需要诚意金(1:是,2:否)
     */
    public Integer getIsDeposit() {
        return isDeposit;
    }

    /**
     * 设置 是否需要诚意金(1:是,2:否)
     */
    public void setIsDeposit(Integer isDeposit) {
        this.isDeposit = isDeposit;
    }

    /**
     * 获取 结算类型(1:日结,2:周结,3:月结)
     */
    public Integer getSettleType() {
        return settleType;
    }

    /**
     * 设置 结算类型(1:日结,2:周结,3:月结)
     */
    public void setSettleType(Integer settleType) {
        this.settleType = settleType;
    }

    /**
     * 获取 薪资(用来排序)
     */
    public BigDecimal getPaySort() {
        return paySort;
    }

    /**
     * 设置 薪资(用来排序)
     */
    public void setPaySort(BigDecimal paySort) {
        this.paySort = paySort;
    }

    /**
     * 获取 薪资(/小时)
     */
    public BigDecimal getPayHour() {
        return payHour;
    }

    /**
     * 设置 薪资(/小时)
     */
    public void setPayHour(BigDecimal payHour) {
        this.payHour = payHour;
    }

    /**
     * 获取 薪资(/月)最高
     */
    public BigDecimal getPayHeight() {
        return payHeight;
    }

    /**
     * 设置 薪资(/月)最高
     */
    public void setPayHeight(BigDecimal payHeight) {
        this.payHeight = payHeight;
    }

    /**
     * 获取 薪资(/月)最低
     */
    public BigDecimal getPayLow() {
        return payLow;
    }

    /**
     * 设置 薪资(/月)最低
     */
    public void setPayLow(BigDecimal payLow) {
        this.payLow = payLow;
    }

    /**
     * 获取 人数
     */
    public Integer getNumPeople() {
        return numPeople;
    }

    /**
     * 设置 人数
     */
    public void setNumPeople(Integer numPeople) {
        this.numPeople = numPeople;
    }

    /**
     * 获取 性别要求(1:不限,2:男,3:女)
     */
    public Integer getSexType() {
        return sexType;
    }

    /**
     * 设置 性别要求(1:不限,2:男,3:女)
     */
    public void setSexType(Integer sexType) {
        this.sexType = sexType;
    }

    /**
     * 获取 年龄要求
     */
    public String getAge() {
        return age;
    }

    /**
     * 设置 年龄要求
     */
    public void setAge(String age) {
        this.age = age;
    }

    /**
     * 获取 身高要求(单位:CM)
     */
    public Integer getStature() {
        return stature;
    }

    /**
     * 设置 身高要求(单位:CM)
     */
    public void setStature(Integer stature) {
        this.stature = stature;
    }

    /**
     * 获取 工作次数要求(0:不限)
     */
    public Integer getWorkNum() {
        return workNum;
    }

    /**
     * 设置 工作次数要求(0:不限)
     */
    public void setWorkNum(Integer workNum) {
        this.workNum = workNum;
    }

    /**
     * 获取学历要求(1:初中,2:中专,3:高中,4:大专,5:本科,6:硕士,7:博士,8:不限)
     * 
     * @return
     */
    public Integer getEducation() {
        return education;
    }

    /**
     * 设置学历要求(1:初中,2:中专,3:高中,4:大专,5:本科,6:硕士,7:博士,8:不限)
     * 
     * @param education
     */
    public void setEducation(Integer education) {
        this.education = education;
    }

    /**
     * 获取 公司名称
     */
    public String getCompanyName() {
        return companyName;
    }

    /**
     * 设置 公司名称
     */
    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    /**
     * 获取 公司介绍
     */
    public String getCompanyIntroduce() {
        return companyIntroduce;
    }

    /**
     * 设置 公司介绍
     */
    public void setCompanyIntroduce(String companyIntroduce) {
        this.companyIntroduce = companyIntroduce;
    }

    /**
     * 获取 联系方式(手机号)
     */
    public String getMobile() {
        return mobile;
    }

    /**
     * 设置 联系方式(手机号)
     */
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    /**
     * 获取 联系方式(微信号)
     */
    public String getWx() {
        return wx;
    }

    /**
     * 设置 联系方式(微信号)
     */
    public void setWx(String wx) {
        this.wx = wx;
    }

    /**
     * 获取 删除标记(1:存在,2:删除)
     */
    public Integer getDelFlag() {
        return delFlag;
    }

    /**
     * 设置 删除标记(1:存在,2:删除)
     */
    public void setDelFlag(Integer delFlag) {
        this.delFlag = delFlag;
    }

    /**
     * 获取 创建时间
     */
    public Date getCreatedAt() {
        return createdAt;
    }

    /**
     * 设置 创建时间
     */
    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }

    /**
     * 获取 更新时间
     */
    public Date getUpdatedAt() {
        return updatedAt;
    }

    /**
     * 设置 更新时间
     */
    public void setUpdatedAt(Date updatedAt) {
        this.updatedAt = updatedAt;
    }

    /**
     * 获取省
     * 
     * @return
     */
    public String getProvince() {
        return province;
    }

    /**
     * 设置省
     * 
     * @param province
     */
    public void setProvince(String province) {
        this.province = province;
    }

    /**
     * 获取市
     * 
     * @return
     */
    public String getCity() {
        return city;
    }

    /**
     * 设置市
     * 
     * @param city
     */
    public void setCity(String city) {
        this.city = city;
    }

    /**
     * 获取区
     * 
     * @return
     */
    public String getArea() {
        return area;
    }

    /**
     * 设置区
     * 
     * @param area
     */
    public void setArea(String area) {
        this.area = area;
    }

    /**
     * 获取详细地址
     * 
     * @return
     */
    public String getAddress() {
        return address;
    }

    /**
     * 设置详细地址
     * 
     * @param address
     */
    public void setAddress(String address) {
        this.address = address;
    }

    /**
     * 获取 ID集合
     */
    public List<Integer> getIds() {
        return ids;
    }

    /**
     * 设置 ID集合
     */
    public void setIds(List<Integer> ids) {
        this.ids = ids;
    }

    /**
     * 获取 用户ID集合
     */
    public List<Integer> getUserIds() {
        return userIds;
    }

    /**
     * 设置 用户ID集合
     */
    public void setUserIds(List<Integer> userIds) {
        this.userIds = userIds;
    }

    /**
     * 获取 职位表集合
     */
    public List<Post> getPosts() {
        return posts;
    }

    /**
     * 设置 职位表集合
     */
    public void setPosts(List<Post> posts) {
        this.posts = posts;
    }

    /**
     * 获取是否已过期(true:是,false:否)
     * 
     * @return
     */
    @SuppressWarnings("deprecation")
    public Boolean getIsOutDate() {
        Date closeTimeReady = getCloseTimeReady();
        if (StringUtil.isBlankObject(closeTimeReady)) {
            return false;
        }
        Date date = new Date(closeTimeReady.getTime());
        Date startTime = getStartTime();
        date.setHours(startTime.getHours());
        date.setMinutes(startTime.getMinutes());
        date.setSeconds(startTime.getSeconds());

        return date.getTime() <= DateUtil.nowLong();
    }

    /**
     * 设置是否已过期(true:是,false:否)
     * 
     * @param isOutDate
     */
    public void setIsOutDate(Boolean isOutDate) {
        this.isOutDate = isOutDate;
    }

    /**
     * 以上由工具自动生成，以下为手动添加
     */

    /**
     * 插入初始化
     * @throws IOException 
     */
    public void insertInit() throws IOException {
        Date startYear = getStartYear();
        if (StringUtil.isNotBlankObject(startYear)) {
            setWeek(DateUtil.getWeek(startYear).getName());
        }
        setUserId(TokenUtil.getUserId());
        setNo(IdUtil.uuid());
        setStatus(EPostStatus.LOADING.getCode());
        setDelFlag(EDelFlagStatus.NO.getCode());
        Date now = DateUtil.nowDate();
        setCreatedAt(now);
        setUpdatedAt(now);
    }

    /**
     * 更新初始化
     */
    public void updateInit() {
        Date now = DateUtil.nowDate();
        setUpdatedAt(now);
    }

    /**
     * 更新初始化
     */
    public void setUpdateNull() {
        setStatus(null);
        setStartTime(null);
        setEndTime(null);
    }

}